/**
 * 设置权限
 */

import { constantRoutes, asyncRoutes } from '@/router'

const state = {
  // 一开始 肯定是拥有静态路由的权限
  routes: constantRoutes // 路由表 表示当前用户所拥有的所有路由数组
}
const mutations = {
  // 定义修改routes的mutations
  // payload 认为是我们登陆成功需要添加的新路由
  setRoutes(state, newRoutes) {
    /* 注意：以下这种写法不对
    会造成从刚登陆完退出的用户上添加新路由
    而不是在原来的静态路由根据用户的角色追加新路由 */
    // state.routes = [...state.routes, ...newRoutes]  // 错误的
    state.routes = [...constantRoutes, ...newRoutes] // 这才是每次根据新登录的用户添加拥有的路由和静态路由
  }
}
const actions = {
  // 筛选权限路由
  // 第二个参数为当前用户的所拥有的菜单权限
  // menus:['setteings','permissions']
  // asyncRoutes 是所有的动态路由
  // asyncRoutes ==> [{path:'/setting',name: 'setting',...},{}]
  filterRoutes(context, menus) {
    const routes = []
    // 筛选出 动态路由中的menus中能对上的路由
    menus.forEach((key) => {
      // key 是标识
      // asyncRoutes 中找每个对象中的name是否和key相等 相等就找到了需要筛选出来，不相等就没找到 没有权限
      routes.push(...asyncRoutes.filter((item) => item.name === key)) // 可能得到的是空数组
    })
    // 得到的routes是所有模块中满足权限要求的路由数组
    // routes 就是当前用户所拥有的 动态路由的权限
    context.commit('setRoutes', routes) // 将动态路由提交给mutations
    return routes // 这里return是给路由addRoutes使用
  }
}

export default {
  // 加上命名空间
  namespaced: true,
  state,
  mutations,
  actions
}
